const _ = require('lodash')
const fs = require('fs')
const path = require('path')

// 映射 d 文件夹为模块

const mapDir = (d) => {
  const tree = {}

  // 获取当前文件夹下的所有，分文件夹、文件
  const [dirs, files] = _(fs.readdirSync(d)).partition((p) =>
      fs.statSync(path.join(d, p)).isDirectory()
    )
    // 映射文件夹
  dirs.forEach((dir) => {
      tree[dir] = mapDir(path.join(d, dir))
    })
    // 映射文件
  files.forEach((file) => {
    // 获取文件后缀名
    if (path.extname(file) === '.js') {
      tree[path.basename(file, '.js')] = require(path.join(d, file))
    }
  })

  return tree
}

// 导出当前文件夹下的映射
module.exports = mapDir(path.join(__dirname))